import time
import math
from Xlib import display, X
from Xlib.ext import xtest

def move_rel(dx, dy, duration=1.5, steps=60):
    """Более надежный вариант с запросом позиции перед каждым шагом."""
    d = display.Display()
    screen = d.screen()
    step_delay = duration / steps
    
    for i in range(1, steps + 1):
        progress = i / steps
        t = progress ** 2  # ease-out
        
        # Всегда получаем текущую позицию
        current_x = screen.root.query_pointer()._data["root_x"]
        current_y = screen.root.query_pointer()._data["root_y"]
        
        # Цель на этом шаге
        target_x = current_x + int(dx / steps)
        target_y = current_y + int(dy / steps)
        
        xtest.fake_input(d, X.MotionNotify, x=target_x, y=target_y)
        d.sync()
        time.sleep(step_delay)
# Пример использования:

